package org.Date;

import org.Utils.DateFormatComparator;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;

public class TestDate {
    public static void printZeroDate() {
        //注意：是java.util.Date;
        //而非 java.sql.Date，此类是给数据库访问的时候使用的
        Date now= new Date();
        //打印当前时间
        System.out.println("当前时间:"+now.toString());
        //getTime() 得到一个long型的整数
        //这个整数代表 1970.1.1 08:00:00:000，每经历一毫秒，增加1
        System.out.println("当前时间getTime()返回的值是："+now.getTime());

        Date zero = new Date(0);
        System.out.println("用0作为构造方法，得到的日期是:"+zero);
    }

    public static void dateFormat() {
        //y 代表年
        //M 代表月
        //d 代表日
        //H 代表24进制的小时
        //h 代表12进制的小时
        //m 代表分钟
        //s 代表秒
        //S 代表毫秒
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
        Date d= new Date();
        String str = sdf.format(d);
        System.out.println("当前时间通过 yyyy-MM-dd HH:mm:ss SSS 格式化后的输出: "+str);

        SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd" );
        Date d1= new Date();
        String str1 = sdf1.format(d1);
        System.out.println("当前时间通过 yyyy-MM-dd 格式化后的输出: "+str1);
    }

    public static void formatString2Date() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );

        String str = "2016/1/5 12:12:12";

        try {
            Date d = sdf.parse(str);
            System.out.printf("字符串 %s 通过格式  yyyy/MM/dd HH:mm:ss %n转换为日期对象: %s",str,d.toString());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void sortDateByTime() {
        List<String> dateList = new ArrayList<>();
        dateList.add("1979-05-24 19:06:36");
        dateList.add("1982-08-20 06:28:50");
        dateList.add("1970-11-06 10:44:18");
        dateList.add("1974-09-01 15:27:34");
        dateList.add("1993-06-17 01:01:40");
        dateList.add("1984-06-19 16:20:30");
        dateList.add("2000-09-30 18:49:16");
        dateList.add("1989-12-31 09:01:01");
        dateList.add("1989-06-27 02:04:31");

        Comparator<String> comparator = new DateFormatComparator();
        dateList.sort(comparator);

        System.out.println(dateList.toString());
    }

    public static void currentMS() {
        Date now= new Date();

        //当前日期的毫秒数
        System.out.println("Date.getTime() \t\t\t返回值: "+now.getTime());
        //通过System.currentTimeMillis()获取当前日期的毫秒数
        System.out.println("System.currentTimeMillis() \t返回值: "+System.currentTimeMillis());
    }

    public static void random1995Date() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
        String str = "1995/1/1 00:00:00";
        String strEnd = "1995/12/31 23:59:59";

        try {
            Random r = new Random();

            Date startDate = sdf.parse(str);
            Date endDate = sdf.parse(strEnd);

            System.out.println("1995年第一天 " + startDate.toString());
            System.out.println("1995年最后一天 " + endDate.toString());

            long yearMS = endDate.getTime() - startDate.getTime();

            long randomLong = (long)(Math.random() * yearMS);

            System.out.println("1995年这一年种的一个随机时间 "+ new Date(startDate.getTime() + randomLong).toString());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
//        LocalDateTime
    }
}
